今天我們要來介紹分散式系統中的一個基本概念,有三個重要特性,但我們只能同時滿足其中兩個。其中一個必定會被犧牲。來看一下為什麼吧~
這是指當我們進行資料更新操作時,所有的節點都會立即同步更新。因此,無論我們從哪個節點讀取資料,都會得到最新的結果。舉例來說,假設我們在一個節點上更新了一筆資料,根據一致性要求,所有節點必須立刻反映這個更新結果。但是,當Network partition發生時,由於節點之間的通訊被切斷,某些節點可能無法即時得到這個更新。為了保持一致性,系統可能會選擇拒絕讀寫請求,直到所有節點都能同步更新。因此,在這種情況下,系統的可用性會受到影響。
P.S. 當系統的各個節點因為網路問題而無法彼此通訊,這就是所謂的Network partition。
這是指無論何時我們向系統發出讀寫請求,系統都能夠回應我們的請求,即使有些節點發生了問題。這代表即使Network partition發生時,系統仍然會接受並處理請求。但是,為了保持高可用性,系統可能會允許某些節點提供尚未同步更新的資料,導致我們從不同的節點讀取到不同的結果,這就違反了一致性。
即使系統的不同節點之間的通訊中斷,系統仍能繼續運作。
根據上面的介紹,我們通常會選擇CP
或是AP
,不會選擇CA
,因為現實世界的網路幾乎不可避免會面臨Network partition的風險,比如網路延遲、硬體故障、節點掉線等情況。這代表我們為了維持CA就只能使用單一節點,不然無法保持CA的原則。
例如,某些金融系統可能會偏向一致性(C)而在分區時犧牲可用性(A),以確保所有交易記錄都是正確的。而像社交媒體這樣的應用可能會偏向可用性(A),即使在分區的情況下允許一定程度的一致性犧牲,以確保用戶能夠持續使用服務。
我們可以根據不同情境選擇不同的方案,不一定每種狀況都適合當下得情境,這也是需要好好注意的地方~
https://www.explainthis.io/zh-hant/swe/cap-theorem